技術問答
技術文章
iT 徵才
Tag
聊天室
2024 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2019 iT 邦幫忙鐵人賽
DAY
22
0
自我挑戰組
作業系統概論
系列 第
22
篇
DAY 22 Virtual Memory(虛擬記憶體) (上)
2019鐵人賽
betty1005
團隊
77乳加巧克力
2018-11-06 16:38:45
14246 瀏覽
分享至
背景
在前一個章節中,我們提到了physical memory跟logical memory兩種記憶體分別,而在這章的一開始會稍微再提到physical memory的相關觀念。
關於虛擬記憶體呢,其背景就是因為physical memory的大小雖然說並不固定,可是當要執行的process比這個physical memory還要大時,我們就需要使用到所謂的「虛擬記憶體」來解決空間不足的問題。
造成空間不足的原因很簡單,因為physical memory向外宣稱自己的空間很大、很足夠,所以讓使用者跟process都信以為真,但當要執行時卻發現空間不足,因為有些記憶體空間是放在硬碟中,而這時又會出現一個問題--「Page fault」,這個問題我們會在後面加以解釋。
而虛擬記憶體將logical跟physical memory的概念給分開解釋:
因為logical memory的空間較大,因此可以讓多個process一起共享這個空間。
如果虛擬記憶體的分配管理妥當,則process在執行上也會順利許多。
而對於I/O來說,因為大小、速度跟CPU之間都有差別,自然也會連帶影響到執行的流暢度。
在實作中有兩種做法:
Demand paging:就是將process需要的pages切割成一小段一小段的去執行。
Demand segmentation:依照process設計時的邏輯架構進行切分;其優點是因為每一個架構都有自己不同的存取模式,如變數、指令等,所以可依照不同架構去切分;而缺點是從一開始OS分配的空間中執行,變成要依不同架構讓OS去各自分配空間才能執行。
以下這就是virtual memory跟physical memory之間的關係:
Demand Paging
其定義很簡單,就是依照需求而得到的page資源。
原則:
當pages被需要了,而且又在記憶體中,就可以將其順序往上搬,加以使用。
如果pages已經不被需要、無效了,就將其退出記憶體裡。
最麻煩的是,如果發現需要的pages不在實際記憶體中,就要去尋找並將它swap in記憶體中。
Lazy swapper:定義就是因為資源的有限,無法把所有的pages都swap in記憶體中,所以只能將已確定、即將要使用的pages給swap in記憶體中,而這就叫做「Lazy swapper」。
以下就是Demand paging的示意圖。
Valid-Invalid Bit
以下是一張示意圖,我們以圖片來解釋:
圖片中的valid是代表frame有存在記憶體中;invalid就是表示frame並不在記憶體中。
之所以設計這種分辨方式,是因為base memory的大小跟physiacl memory的大小不同,才設計此方法加以辨識。就是辨識從process到virtual memory的frame是否在記憶體中。
使用時機就是在MMU真的需要執行時,就要到physical address進行translation:
如果是valid,那沒有問題。
如果是invalid的話,就會發生page fault。
Page fault
在前面幾段多多少少都有提到這個問題,那這是什麼問題呢?
簡單來說,有兩種情況會產生此問題:
單純只是程式碼編撰錯誤,那只要刪除就可以解決。
因為記憶體對外宣稱其空間足以容納process使用,所以當process真的要執行時,發現要求的page是在硬碟中不是在記憶體中,而這種情況就稱為「Page fault」。
解決方法:
第一種情況的很簡單,刪除程式即可。
第二種情況較複雜,需要在physical memory中找到free frame使用,但因為資源有限所以有困難度在,因此只能在記憶體中找尋已完成或沒是在等待而被占住的空間,將其swap out,讓該page再swap in記憶體內使用。
以下就是處理page fault的示意圖:
Page Fault Rate(p),在系統中自然不能太高:
如果p=0的話,沒有page fault的發生。
如果p=1的話,每個reference都是錯誤的。
Effective Access Time(EAT) = (1-p) * memory access+p(page fault overhead+swap page out+swap page in) :
舉例來說,如果記憶體存取時間是200ns,平均page fault出現的時間為8ms,則EAT = (1-p) * 200+p(8ms) = 200+p * 7999800(ns)。
讓demand paging的效能最佳化,是一件很重要的事情,像是在swap space I/O中,讓做swap out/in時給予特權,且在硬碟中有著重要性的話,將其放置在特別位置、分配順序,就能提高優先權。
留言
追蹤
檢舉
上一篇
DAY 21 Memory Management(下)
下一篇
DAY 23 Virtual Memory(虛擬記憶體) (中)
系列文
作業系統概論
共
30
篇
目錄
RSS系列文
訂閱系列文
46
人訂閱
26
DAY 26 File-System(檔案系統) (上)
27
DAY 27 File System(檔案系統) (下)
28
DAY 28 Implementing File Systems(檔案系統執行) (上)
29
DAY 29 Implementing File System(檔案執行系統) (中)
30
DAY 30 Implementing File System(檔案執行系統) (下)
完整目錄
直播研討會
{{ item.subject }}
{{ item.channelVendor }}
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
1064
組
團體組數
40
組
累計文章數
22210
篇
完賽人數
600
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
windows server
linux
css
react
vue.js
熱門問題
mail server 主機推薦
Outlook 2016 收不到外來信 已解決
windows11的複製功能出現問題
有關Chrome瀏覽器擴充功能,選定特別類型檔案封鎖上傳,並且三秒後關掉網頁
minIO 跟超融合
Chrome瀏覽器限制上傳檔案類型
SQL 如何將同欄位數據依照條件拆分成不同欄的資料
mongodb atlas 連線速度變慢或斷線
CTF GAME
同網段下無法連線到印表機
熱門回答
mail server 主機推薦
SQL 如何將同欄位數據依照條件拆分成不同欄的資料
windows11的複製功能出現問題
有關Chrome瀏覽器擴充功能,選定特別類型檔案封鎖上傳,並且三秒後關掉網頁
Outlook 2016 收不到外來信 已解決
熱門文章
「記憶體與基本儲存電路:Latch & Flip Flop」
請問大家有爬蟲Shopee的經驗嗎?
從零開始學習Java筆記(基本語法)
KMP 演算法筆記
調變與解調的基本概念(發射端 & 接收端)
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}